package io流;

import org.junit.Test;

import java.io.*;
import java.io.File;

public class IOSAPI {
    /**
     *标准流：IO流处理一场对象
     *
     * 高级流：BufferedOutputStream  缓冲输出流  写 bos.txt
     *        BufferedInputStream   缓冲输入流   读入
     */

    /**
     * 缓冲输入流：构造器--->异常对象  功能：合理传输数据   效率提高
     * 字符流【转化流】---介乎额：缓冲输入流读取单位  为字节问题
     * InputStreamReader   读取单位：字符
     * OutputStreamWriter  写出单位：字符   调用字符串getBytes写出文本
     * <p>
     * 构造器具备：添加字符集：UTF8万国码
     * new BufferedInputStream（fis，size：存字节数组【指定】）
     * 问题一：不能指定字符集
     * 2。不能按照字符读取
     */
@Test
    public  void  testBIS(){
    //创建低级流
   /* FileInputStream  fis=new FileInputStream("bos.txt");
    //创建高级流---指定字符集---缓冲不具备功能--新【转换流】
    BufferedInputStream  bis=new BufferedInputStream("utf8");
    //read()--读：一个字节，字节数组--->专门读文字
    bis.read();*/
}
/**
 * 高级流
 * 针对于缓冲输出/入流功能上的限定---传输：文本
 * <p>
 *     字符流【转化流】---解决：缓冲输入流读取单位   为字节问题
 *     InputStreamReader  读取单位：字符
 *     OutputStreamWriter  写出单位：字符   调用字符串getBytes写出文本
 *     需求：重新写流---针对：文字   写出文本：osw.txt
 */
@Test
    public  void  testOSW() {
    //创建低级流
    //标准流：置空流
    FileOutputStream c = null;
    //不考虑效率--之传输文本--字符输出流：输出单位字符形式
    //字符流：都可以在构造器第二个参数指定编码集
    OutputStreamWriter c1 = null;
    try {
        c = new FileOutputStream("osw.txt");
        c1 = new OutputStreamWriter(c, "UTF8");
        //write()  直接写出文本【不许将文本转换为字节数组】
        c1.write("喜喜");
        c1.write("哈哈");//换行：字符char
        c1.write("呵呵");
    } catch (FileNotFoundException e) {//文件不存在
        e.printStackTrace();
    } catch (UnsupportedEncodingException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    } catch (Exception e) {
        e.printStackTrace();
    } finally {
        //关闭高级流：字符输出流
        if (c1 != null)
            try {
                c1.close();
            } catch (IOException e) {
                e.printStackTrace();
            }

    }

}
@Test
    public  void  testISR(){
    //创建低级流
    FileInputStream c2=null;
    //创建高级流---转换流-字符输入流
InputStreamReader c3=null;
//读 read（） 问题：读入数据单位：字节而不是字符读字// 符
                        //转换流---套高级流：缓冲字符输入/出流
//创建高级流---针对转换流中：字符输入流无法读取形式：
                           //字符的情况---缓冲字符输入流
BufferedReader c4=null;;
 try{
 c2=new FileInputStream("osw.txt");
         c3=new InputStreamReader(c2,"UTF8");
         c4=new BufferedReader(c3);
     /**
      * BufferedReader
      * reddLine() 读入若干字符穿，知道读到没有换行符为止
      */
     int len=-1;
     while((len= c4.read())!=-1){
         String str= c4.readLine();
         System.out.println("打印读字符串"+str);
     }
 }catch (FileNotFoundException e){
     e.printStackTrace();
 }catch (IOException e){
     e.printStackTrace();
 }finally {
     if (c3 !=null)
         try{
             c3.close();
         }catch (IOException e){
             e.printStackTrace();
         }
     if (c4 !=null)
         try{
             c4.close();
         }catch (IOException e){
             e.printStackTrace();
         }
 }
}
/**
 * 作业2：读取ISOAPI.java文件---所有代码---写出控制台
 */
@Test
    public  void  testHomeWork2(){
    FileInputStream fis=null;
    //高级流---字符输入流
    InputStreamReader isr=null;
    //缓冲输入流
    BufferedReader br=null;
    try{
        fis=new FileInputStream("src"+ java.io.File.separator +
                "main" + java.io.File.separator +
                "java" + java.io.File.separator +
                "com" + java.io.File.separator +
                "tedu" + java.io.File.separator +
                "api" + java.io.File.separator +
                "io" + File.separator + "iosapi.java");
        isr=new InputStreamReader(fis);
        br=new BufferedReader(isr);
        String len=null;
        while((len= br.readLine())!=null);{
            System.out.println("打印IOSAPI所有内容"+len);
        }
    }catch (FileNotFoundException e){
        e.printStackTrace();
    }catch (IOException e){
        e.printStackTrace();
    }finally {
        if (br !=null)
            try{
                isr.close();
            }catch (IOException e){
                e.printStackTrace();
            }
    }
}


}